
let app = require('express')();
let http = require('http').Server(app);
let io = require('socket.io')(http);

let users = []; // 记录所有已经登录过的用户

http.listen(3000, function(){
    console.log('服务器已开启');
});
// express 处理静态资源
// public 设置静态资源目录
app.use(require('express').static('public'));


// socket表示用户的连接
// socket.emit 发送事件过去
// socket.on 接收事件过来
io.on('connection', (socket) => {
    console.log('新用户连接');
	socket.on('login', data => {
		// 已经登录不可再登录
		let user = users.find(item => item.username === data.username);
		// console.log(user);
		if(user){
			socket.emit('loginError', {
				msg: '您已经登录~'
			})
			console.log('loginFail')
		} else {
			users.push(data);
			// 告诉当前用户
			socket.emit('loginSuccess', {
				msg: '登录成功',
				data
			})
			//告诉所有的用户，目前聊天室中有多少人
			io.emit("userList", users)
			// 告诉所有用户，有用户加入到聊天室，广播消息
			io.emit('addUser', data);
			// 把登录成功的用户名和头像存起来
			socket.username = data.username;
			socket.avatar = data.avatar;
		}
	});
	// 用户断开连接功能
	socket.on('disconnect', () => {
		// 把当前用户信息从users中删除掉
		let index = users.findIndex(item => item.username === socket.username)
		users.splice(index, 1);
		// 1、告诉所有人，有人离开聊天室
		console.log('!!!!!!!',socket.username);
		io.emit('delUser', {
			username: socket.username,
			avatar: socket.avatar
		})
		// 2、告诉所有人，userList发生更新
		io.emit('userList', users)
	})
	// 收到消息、再发送所有用户
	socket.on('sendMessage', data => {
		console.log('聊天内容', data);
		// 告诉所有用户
		io.emit('receiveMessage', data);
	})
	// 收到图片、广播出去
	socket.on('sendImage', data => {
		console.log('收到图片', data);
		io.emit('receiveImage', data);
	})
});

